package co.edu.udea.iw.rtf.dao;

import java.util.List;

import co.edu.udea.iw.rtf.dto.Solicitud;
import co.edu.udea.iw.rtf.dto.Sucursal;
import co.edu.udea.iw.rtf.exception.RTFDaoException;

/**
 * 
 * @author juank
 * Interfaz con los metodos que debe tener el controlador de la entidad Solicitud
 */
public interface SolicitudDAO {

	/**
	 * Funcion que almacene los datos de una solicitud en el sistema
	 * @param sucursal
	 */
	public void guardar(Solicitud solicitud) throws RTFDaoException;
	
	/**
	 * Funcion que asigna un responsable a una solicitud
	 * @param sucursal
	 */
	public void actualizar(Solicitud solicitud) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene los datos de una solicitud dada por su codigo
	 * @param sucursal
	 * @return Solicitud
	 * @throws RTFDaoException
	 */
	public Solicitud obtener(Integer codigo) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene una lista de las solicitudes asignadas a un usuario identificado por su Login
	 * @param login
	 * @return List<Solicitud> 
	 * @throws RTFDaoException
	 */
	public List<Solicitud> obtenerAsignadas(String login) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene la lista de solicitudes que no han sido respondidas de acuerdo al usuario que fueron asignadas
	 * @param login
	 * @return List<Solicitud> 
	 * @throws RTFDaoException
	 */
	public List<Solicitud> obtenerSinResponder(String login) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene una lista de las solicitudes pendientes de una sucursal dada
	 * @param sucursal
	 * @return List<Solicitud> 
	 * @throws RTFDaoException
	 */
	public List<Solicitud> obtenerPendientePorSucursal(Sucursal sucursal) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene una lista de las solicitudes deuna sucursal dada
	 * @param sucursal
	 * @return List<Solicitud> 
	 * @throws RTFDaoException
	 */
	public List<Solicitud> obtenerPorSucursal(Sucursal sucursal) throws RTFDaoException;
	
	/**
	 * Funcion que obtiene una lista de todas las solicitudes existentes en el sistema
	 * @return List<Solicitud> 
	 * @throws RTFDaoException
	 */
	public List<Solicitud> obtener() throws RTFDaoException;
	
	public void actulizarRespuesta(Solicitud solicitud) throws RTFDaoException;
	
	public List<Solicitud> obtenerSinAsignar() throws RTFDaoException;
}
